package dlwntk6545;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.print.attribute.standard.PresentationDirection;

public class J01_HelloJDBC {
	
	/*
			
			JDBC
			데이터베이스에 접근하고 조작하는 것은 
			아주 중요한 주제중 하나임
			
			데이터베이스에는 여러 브랜드가 있음
			Oracle, MySQL, MSSQL 등등
			
			모든 데이터베이스 서버는 독점 방식을 통해 
			접근하고 관리하도록 허용됨
			따라서, 각각의 데이터베이스에 접근하려면 
			각 브랜드가 제공하는 기술만을 사용해야 함
			
			운좋게도 자바에서는 서로 다른 데이터베이스에 
			통일된 방식으로 접근하게 하는 JDBC를 제공함
			Java 7 은 JDBC 4.1을 제공
			JDBC Core API: java.sql 패키지
			JDBC Optional API: javax.sql 패키지
			
			JDBC Driver
			데이터 베이스 제조사가 제공하는 라이브러리
			각 제조사는 자신만의 독점적인 기술을 이 라이브러리에 포함시켜 둠
			이것을 JDBC API라는 통일된 코드를 이용해서 데이터베이스를 제어할 수 있음
			
			데이터베이스 접근 4단계
			1. 데이터베이스에 접근하기 위해 JDBC 드라이버 불러오기
			2. 데이터베이스 연결 얻기
			3. 실행할 SQL 문장을 만들기 위해 
			   Statement/PreparedStatement 객체 생성
			4. SQL 문장을 실행하고 데이터베이스로 부터 넘어온 결과를 처리하기 위해
			   ResultSet 객체를 생성
			5. 모든 처리가 끝나면 JDBC 자원 '해제'
			
			Oracle JDBC 드라이버 등록
			ojdbc6.jar 를 라이브러리로 등록
			Build Path -> add external archives
			
	 */
	
	public static void main(String[] args) {
		
		//오라클 데이터베이스 연결정보
		final String DRV = "oracle.jdbc.driver.OracleDriver";
		final String URL = "jdbc:oracle:thin:@112.216.253.125:1521:xe";
		final String USR = "dlwntk6545";	//아이디
		final String PWD = "dlwntk6545";	//비번
		
		/*
				
				MySQL 데이터베이스 연결정보
				DRV = "com.mysql.jdbc.Driver
				URL	= "jdbc:mysql://112.216.253.125:3306/zipcode
				USR = zipcode
				PWD = zipcode
				
		 */
		
		//데이터베이스 작업용 객체 정의
		Connection conn = null;			//연결
		PreparedStatement pstmt = null;	//질의
		ResultSet rs = null;			//결과
		String SQL = "select * from employees";
		
		//JDBC 관련코드 작성시 예외처리를 위해
		//try - catch - finally 를 작성해둘 것
		try{
			//1.JDBC 드라이버 불러오기
			//Class : 클래스에 대한 객체를 동적으로 생성
			Class.forName(DRV);
			//2.데이터베이스 연결
			conn = DriverManager.getConnection(URL, USR, PWD);
			//3.실행할 SQL 질의 작성
			pstmt = conn.prepareStatement(SQL);
			//4.SQL 질의를 실행하고 결과를 받음
			rs = pstmt.executeQuery();
			//5.받은 결과 처리
			if(rs.next()){	//결과에 데이터가 존재하면 실행
				do{			//계속 반복해서 그것을 처리
					//rs.getXxx() : ResultSet 객체에서 데이터를 가져옴
					System.out.println(rs.getString("employee_id"));
					System.out.println(rs.getString(4));	//email
					System.out.println();
				}while(rs.next());
			}else{			//결과에 데이터가 없으면 실행
				System.out.println("데이터가 없데영~ 빨리 적어라.... 화났다.....(아마도)");
			}
			
		}catch(Exception ex){
			
			ex.printStackTrace();
			
		}finally{
			
			//6.JDBC 객체 해제
			
				if(rs != null)	
					try{rs.close(); rs = null;} catch(Exception e) {}
				if(rs != null)	
					try{pstmt.close(); pstmt = null;} catch(Exception e) {}
				if(rs != null)	
					try{conn.close(); conn = null;} catch(Exception e) {}
			
			
		}
		
	}

}
